Functionality and data for software applications can be provided over a network (e.g., the Internet) by a system of one or more computers. Software as a Service (SaaS), for example, is one way of providing software applications by centrally hosting applications on computing devices that are typically remotely located from the where the applications may be utilized and/or interacted with. Such “on-demand” software is often accessed by users using a web browser or another thin client.
Software applications commonly utilize a variety of data values of a variety of kinds of data formats. One type of a data format is a data type (or simply “type”), which is a classification identifying one of various types of data, such as real, integer or Boolean, and determines the possible values for that type, the operations that can be done on values of that type, the meaning of the data, and the way values of that type can be stored.
Additionally, applications also utilize data in different data formats within a same type. For example, the date “Jan. 2, 2015” may be represented as a string in a variety of formats, including but not limited to “2015-01-02”, “01-02-15”, “2 Jan. 2015”, etc.
Software applications often translate data values between formats (e.g., from a first type to a second type) for performing different actions. For example, an application may convert a particular received value from a first data format (e.g., a string data type) to a second data format (e.g., an integer data type) for comparison or mathematical purposes, but then convert this value to a third data format (e.g., a binary data type) to be used for passing to a library or function requiring arguments in this data type. Accordingly, a number of conversion functions/methods are commonly used by applications, and it is common for applications, over the course of an execution path, to convert one particular value to many different data formats for various purposes.
Some software applications utilize “back-end” databases for data storage, retrieval, and/or analysis. The most widespread kind of database used today is the relational database, which stores data in a set of relational tables that may be reorganized and accessed in a number of different ways. A relational database management system (DBMS) uses relational techniques for storing and retrieving data. Additionally, other kinds of databases are in widespread use such as NoSQL databases, object-oriented databases, object-relational databases, etc.
In database systems, interactions such as accessing, retrieving, and processing typically occur through queries made in accordance with the application program interface (API) protocol supported by the database management system (or “database server”). For example, an application may generate a query to interact with a relational database using Structured Query Language (SQL) statements. SQL statements are used both for interactive queries for data from the database (e.g., inserting data, updating data, selecting data, deleting data, etc.) and for gathering statistics and other data. However, many other kinds of querying techniques are utilized by a variety of database systems.
However, it can be challenging for application developers to generate proper, safe, and efficient queries for interacting with databases. To deal with this abstraction, some applications are architected to utilize database abstraction layers. A database abstraction layer is an application programming interface (API) that unifies the communication between a computer application and one or more underlying databases. Thus, application developers may utilize a consistent, relatively-simple API (e.g., make “simple” function calls) to communicate with underlying databases without having to have expert knowledge of query syntax or any particularities of the actual databases. Further, as new database technologies emerge or query syntaxes change, application developers do not have to adapt to any new interfaces.